package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.PropertyFunctionPO;
import com.itlong.cloud.POJO.VO.property.PropertyFunctionVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      物业系统菜单资源数据访问接口
 * </desc>
 *
 * @createDate 2017-9-13 14:4
 */
@Mapper
@Repository
public interface IPropertyFunctionDao extends IAbstractBaseDao<PropertyFunctionPO>{


    /**
     * <desc>
     *      根据角色查询菜单详情
     * <desc/>
     * @param   params  查询参数
     * @return  List<PropertyFunctionPO>    返回列表
     * @author Biao.R
     * @createDate 2017/10/17
     */
    List<PropertyFunctionPO> getFunctionsByRole(Map<String, Object> params);

    /**
     * <desc>
     *      保存资源
     * </desc>
     *
     * @param params 数据参数
     * @return sql执行行数
     * @author Biao.R
     * @createDate 2017/10/16
     */
    Integer save(Map<String, Object> params);
    /**
     * <desc>
     *      修改资源
     * </desc>
     *
     * @param params 数据参数
     * @return 执行行数
     * @author Biao.R
     * @createDate 2017/10/16
     */
    Integer update(Map<String, Object> params);
    /**
     * <desc>
     *      获取分页数据集
     * </desc>
     *
     * @param params 查询参数
     * @return  分页数据集
     * @author Biao.R
     * @createDate 2017/10/16
     */
    List<PropertyFunctionPO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return 总数量
     * @author Biao.R
     * @createDate 2017/10/16
     */
    Integer getPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      删除
     * </desc>
     *
     * @param functionIds 资源id数组
     * @return sql执行行数
     * @author Biao.R
     * @createDate 2017/10/16
     */
    Integer delete(@Param("functionIds") String[] functionIds, @Param("updateTime") Date updateTime);

    /**
     * <desc>
     *      根据父节点id获取正常状态子节点集合
     * </desc>
     *
     * @param functionId 资源id
     * @return 子级结果数据集
     * @author Biao.R
     * @createDate 2017/10/16
     */
    List<PropertyFunctionVO> getChildsByParent(@Param("functionId") String functionId);

    /**
     * <desc>
     *      通过角色id及项目id获取该角色拥有的所有节点ID
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @author Biao.R
     * @createDate 2017/10/16
     */
    List<String> getFunctionIdsByRole(Map<String, Object> params);

    /**
     * <desc>
     *      通过角色id及项目id删除该角色拥有的所有节点
     * </desc>
     *
     * @param roleId 角色id
     * @return
     * @author Biao.R
     * @createDate 2017/10/16
     */
    Integer deleteRoleFunctions(@Param("roleId") String roleId,@Param("projectId")String projectId);

    /**
     * <desc>
     *      获取当前资源节点的所有同级别节点
     * </desc>
     *
     * @param parent 资源id
     * @return
     * @author Biao.R
     * @createDate 2017/10/16
     */
    List<PropertyFunctionPO> getParentLevelFunctions(@Param("parent") String parent);

    /**
     * <desc>
     *      获取父级资源
     * </desc>
     *
     * @param parent 资源id
     * @return
     * @author Biao.R
     * @createDate 2017/10/16
     */
    PropertyFunctionPO getParent(@Param("parent") String parent);


    /**
     * <desc>
     *      通过角色id获取资源
     * </desc>
     *
     * @param roleIds 角色id
     * @param parent 父级节点id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/17
     */
    List<PropertyFunctionVO> getFunctionByRoleId(@Param("roleIds") String[] roleIds,@Param("projectId")String projectId,@Param("parent")String parent);

    /**
     * <desc>
     *      通过component 反向获取对应菜单functionId
     * <desc/>
     * @param  identifier    操作对应的按钮标识
     * @return  该该按钮所在的菜单ID
     * @author Biao.R
     * @createDate 2017/11/30
     */
    String getFunctionIdByIdentifier(@Param("identifier") String identifier);

    /**
     * <desc>
     *      查询所有需要更新菜单的角色 -V1.6
     * </desc>
     *
     * @return
     * @auhtor Jiaqi.X
     * @createDate 2018/04/18
     */
    List<Map<String,Object>> getUpdateRole();

    /**
     * <desc>
     *      插入V1.6角色新增菜单
     * </desc>
     *
     * @param roleId
     * @param projectId
     * @param functionIds
     * @return
     * @author Jiaqi.X
     * @createDate 2018/04/18
     */
    Integer updateV16RoleFunctions(@Param("roleId")String roleId,@Param("projectId")String projectId,@Param("functionIds")String[] functionIds);

    /**
     * <desc>
     *      删除已处理过的数据，保证只执行一次
     * </desc>
     *
     *
     * @param functionIds
     * @return
     * @author Jiaqi.X
     * @createDate 2018/04/18
     */
    Integer deleteV16RoleFunctions(@Param("functionIds") String[] functionIds);

    /**
     * <dsec>
     *      删除旧设备菜单
     * </dsec>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2018/04/18
     */
    Integer deleteOldDeviceFunction();

    /**
     * <desc>
     *      根据物业套餐id获取物业功能菜单
     * </desc>
     *
     * @param propertyPackageIdList 物业套餐id列表
     * @return
     * @Author Zhu.yj
     * @createDate  2020/3/25
     */
    List<String> getFunctionByPackage(@Param("list") List propertyPackageIdList);
}
